package LopCoBan;
import java.util.*;
public class KhachHang {

    private String MaKH;
    private String TenKH;
    private boolean GioiTinh;
    private String Diachi;
    private String CMND;
    private Date NgaySinh;
    private String SoDT;
    private String Email;
    private int DiemTL;
    private ArrayList<CTiet_TDoi_NhomKH> mCTiet_TDoi_NhomKH;
    private ArrayList<HDBan> mHDBan;

    //Các phương thức Contructor
    public KhachHang () {
    	mCTiet_TDoi_NhomKH = new ArrayList<CTiet_TDoi_NhomKH>();
    	NgaySinh = new Date();
    	mHDBan = new ArrayList<HDBan>();
    }
    
    public KhachHang(String ma_val, String ten_val, boolean gt_val, String cmnd_val, Date ns_val)
    {
    	MaKH = ma_val;
    	TenKH = ten_val;
    	GioiTinh = gt_val;
    	Diachi = null;
    	CMND = cmnd_val;
    	NgaySinh = ns_val;
    	SoDT = null;
    	Email = null;
    	DiemTL = 0;
    	mCTiet_TDoi_NhomKH = new ArrayList<CTiet_TDoi_NhomKH>();
    	mHDBan = new ArrayList<HDBan>();
    	
    }
    
    public KhachHang(String ma_val, String ten_val, boolean gt_val, String dc_val, String cmnd_val, Date ns_val, String sodt_val,
    		String email_val, int dtl_val, ArrayList<CTiet_TDoi_NhomKH> ct_val, ArrayList<HDBan> hd_val)
    {
    	MaKH = ma_val;
    	TenKH = ten_val;
    	GioiTinh = gt_val;
    	Diachi = dc_val;
    	CMND = cmnd_val;
    	NgaySinh = ns_val;
    	SoDT = sodt_val;
    	Email = email_val;
    	DiemTL = dtl_val;
    	mCTiet_TDoi_NhomKH = ct_val;
    	mHDBan = hd_val;
    	
    }
    
    //Các phương thức cho CMND
    public String getCMND () {
        return CMND;
    }

    public void setCMND (String val) {
        this.CMND = val;
    }
    
    //Các phương thức cho địa chỉ
    public String getDiachi () {
        return Diachi;
    }

    public void setDiachi (String val) {
        this.Diachi = val;
    }

    //Các phương thức cho điểm tích lũy
    public int getDiemTL () {
        return DiemTL;
    }

    public void setDiemTL (int val) {
        this.DiemTL = val;
    }

    public int CongDTL(int val)
    {
    		DiemTL += val;
    		return DiemTL;
    }
    
    public int TruDTL(int val)
    {
    	DiemTL -= val;
    	return DiemTL;
    }
    
    //Các phương cho Email
    public String getEmail () {
        return Email;
    }

    public void setEmail (String val) {
        this.Email = val;
    }

    //Các phương thức cho giới tính
    public boolean getGioiTinh () {
        return GioiTinh;
    }

    public void setGioiTinh (boolean val) {
        this.GioiTinh = val;
    }

    //Các phương thức cho ma khách hàng
    public String getMaKH () {
        return MaKH;
    }

    public void setMaKH (String val) {
        this.MaKH = val;
    }

    //Các phương thức cho ngày sinh
    public Date getNgaySinh () {
        return NgaySinh;
    }

    public void setNgaySinh (Date val) {
        this.NgaySinh = val;
    }
    
    //Các phương thức cho số điện thoại
    public String getSoDT () {
        return SoDT;
    }

    public void setSoDT (String val) {
        this.SoDT = val;
    }
    
    //Các phương thức cho tên khách hàng
    public String getTenKH () {
        return TenKH;
    }

    public void setTenKH (String val) {
        this.TenKH = val;
    }

    //Các phương thức cho nhóm khách hàng
    public ArrayList<CTiet_TDoi_NhomKH> getCTiet_TDoi_NhomKH () {
        return mCTiet_TDoi_NhomKH;
    }

    public void setCTiet_TDoi_NhomKH (ArrayList<CTiet_TDoi_NhomKH> val) {
        this.mCTiet_TDoi_NhomKH = val;
    }
    
    public int addCTiet_TDoi_NhomKH (CTiet_TDoi_NhomKH val) {
        for(CTiet_TDoi_NhomKH ct:mCTiet_TDoi_NhomKH)
        {
        	if(val.equals(ct)) return 0;
        }
        mCTiet_TDoi_NhomKH.add(val);
        return 1;
        
    }
    
    public CTiet_TDoi_NhomKH NhomKH_VaoNgay(Date val)
    {
    	CTiet_TDoi_NhomKH tmp = null;
    	for(CTiet_TDoi_NhomKH ct:mCTiet_TDoi_NhomKH)
    	{
    		Date nbd = ct.getNgayBD();
    		Date nkt = ct.getNgayKT();
    		//if(nkt!=null && Clstatic.Between_dtd(val, nbd, nkt) )
			{
    			tmp = ct;
    			break;
			}
    	}
    	return tmp;
    }
    
    public NhomKH NhomKH_HT()
    {
    	
    	NhomKH tmp = null;
		for(CTiet_TDoi_NhomKH ct: mCTiet_TDoi_NhomKH)
    	{
			if(ct.getNgayKT()==null) tmp = ct.getNhomKH();
    	}
    	return tmp;
    }
    
    @SuppressWarnings("deprecation")
	public void ThayDoiNhom(ArrayList <NhomKH> ds_nhomkh, Date NgayCapNhat)
    {
    	int maxDTL = 0;
    	NhomKH temp = null;
    	for(NhomKH nhomkh:ds_nhomkh)
    	{
    		if(DiemTL >= nhomkh.getMucDiemTL() && maxDTL < nhomkh.getMucDiemTL())
    		{
    			maxDTL = nhomkh.getMucDiemTL();
    			temp = nhomkh;
    		}
    	}
    	if(temp != null)
    	{
    		for(CTiet_TDoi_NhomKH ct:mCTiet_TDoi_NhomKH)
        	{
        		if(ct.getNgayKT() == null)
        		{
        			Date NgayKT = ct.getNgayKT();
        			NgayKT.setDate(NgayKT.getDate()-1);
        			ct.setNgayKT(NgayKT);
        		}
        	}
    		TruDTL(maxDTL);
    	//	CTiet_TDoi_NhomKH ct = new CTiet_TDoi_NhomKH(NgayCapNhat, null, this, temp);
    	//	this.addCTiet_TDoi_NhomKH(ct);
    	}
    }
    
    //Các phương thức cho hóa đơn khách hàng mua
    public ArrayList<HDBan> getCHDBan () {
        return mHDBan;
    }

    public void setHDBan (ArrayList<HDBan> val) {
        this.mHDBan = val;
    }
    
    public boolean addHDBan (HDBan val)
    {
        for(HDBan hd:mHDBan)
        {
        	if(val.equals(hd)) return false;
        }
        val.setKhachHang(this);
    	this.mHDBan.add(val);
    	return true;
    }
    
    public boolean removeHD(HDBan val)
    {
    	int i = 0;
    	for(HDBan hd:mHDBan)
    	{
    		if(!val.equals(hd)) i++; 
    	}
    	if(i>mHDBan.size()) return false;
    	else
    	{
    		mHDBan.remove(i);
    		return true;
    	}
    }
    
    //Các phương thức thống kê giành cho khách hàng
    public int ThongKe_Tien_DaMua(Date TuNgay, Date DenNgay)
    {
    	int sum = 0;
    	for(HDBan hd:mHDBan)
    	{
    		Date nl = hd.getNgayLap();
    	//	if(Clstatic.Between_dtd(nl,TuNgay,DenNgay)) 
    			sum += hd.TinhTienHD();
    	}
    	return sum;
    }
    
        
}

